package org.yzhzc.api.service;

import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.yzhzc.api.domain.dto.JudgeSubmitDTO;
import org.yzhzc.api.domain.vo.UserQuestionResultVO;
import org.yzhzc.common.core.constants.Constants;
import org.yzhzc.common.core.domain.R;

/**
 * 远程判题服务接口。
 * 通过 Feign 客户端调用判题服务，实现代码提交和判题功能。
 *
 * 使用场景：
 * - 用户提交代码后，调用该接口将代码发送到判题服务进行判题。
 * - 判题服务返回判题结果，前端根据结果展示给用户。
 *
 * 注解说明：
 * - @FeignClient：声明这是一个 Feign 客户端，用于调用远程服务。
 *   - contextId：指定 Feign 客户端的上下文 ID，用于区分多个 Feign 客户端。
 *   - value：指定远程服务的名称，对应注册中心中的服务名称。
 * - @PostMapping：声明这是一个 POST 请求，路径为 "/judge/doJudgeJavaCode"。
 * - @RequestBody：将请求体中的 JSON 数据映射为 JudgeSubmitDTO 对象。
 */
@FeignClient(contextId = "RemoteJudgeService", value = Constants.JUDGE_SERVICE)
public interface RemoteJudgeService {

    /**
     * 提交 Java 代码并进行判题。
     *
     * @param judgeSubmitDTO 判题提交信息，包含代码、题目 ID、用户 ID 等
     * @return 判题结果，封装在 R 对象中，包含判题状态、得分、错误信息等
     */
    @PostMapping("/judge/doJudgeJavaCode")
    R<UserQuestionResultVO> doJudgeJavaCode(@RequestBody JudgeSubmitDTO judgeSubmitDTO);
}